package cn.wl.pchart.dao;

import cn.wl.pchart.entity.Dinfo;
import cn.wl.pchart.entity.Dynamic;
import org.apache.ibatis.annotations.Param;

import java.math.BigInteger;
import java.util.List;

// 动态数据库处理接口
public interface DynamicMapper {

    /**
     * 随机获取一条动态的did
     * @return
     */
    public BigInteger getDynamicRand();
    /**
     * 获取某一条动态的did
     *
     * @param id   用户id，实际上是查询的此用户关注的动态
     * @param time 获取的是比此条动态更早的消息
     * @return
     */
    public BigInteger getDynamic(@Param("id") String id, @Param("time") String time);

    /**
     * 查询id的全部动态did
     * @param id
     * @return
     */
    public List<BigInteger> getDynamicById(@Param("id") String id);

    /**
     * 通过did获取动态
     *
     * @param did
     * @return
     */
    public Dynamic getData(@Param("did") BigInteger did);

    /**
     * 通过did获取该动态的附加信息
     *
     * @param did
     * @return
     */
    public List<Dinfo> getInfo(@Param("did") BigInteger did);

    /**
     * 通过did获取该动态的标签
     * @param did
     * @return
     */
    public List<String> getLabel(@Param("did") BigInteger did);

    /**
     * 通过标签随机取出一个did
     * @param label
     * @return
     */
    public BigInteger getDidByLabel(@Param("label") String label);

    /**
     * 发布动态
     * @param id
     * @param type
     * @param data
     * @param media
     */
    public void sendDynamic(@Param("id") String id, @Param("type") int type, @Param("data") String data, @Param("media") String media);

    /**
     * 删除动态，记得顺便消除转发
     *
     * @param did
     */
    public void deleteDynamic(@Param("did") BigInteger did);

    /**
     * 消除转发
     *
     * @param did
     */
    public void deleteForward(@Param("did") BigInteger did);

    /**
     * 点赞、转发、评论动态：注意这里不带发送动态，转发时还需要单独调用发送动态的函数，
     * 这里只是添加相关信息到附加信息表
     * type: 0=点赞，1=评论，2=转发
     * time不需要填写，mysql自动生成
     */
    public void doDinof(@Param("did") BigInteger did,
                        @Param("type") Integer type,
                        @Param("id") String id,
                        @Param("data") String data);

    /**
     * 删除评论
     * @param did 动态id
     * @param id 用户id
     * @param data 评论内容
     */
    public void deleteComment(@Param("did") BigInteger did,
                              @Param("id") String id,
                              @Param("data") String data);

    /**
     * 取消点赞
     * @param did
     * @param id
     */
    public void cancelLike(@Param("did") BigInteger did, @Param("id") String id);

    /**
     * 查询点赞数
     *
     * @param did
     * @return
     */
    public Integer getLikeNums(@Param("did") BigInteger did);

    /**
     * 查询评论数
     *
     * @param did
     * @return
     */
    public Integer getCommentNums(@Param("did") BigInteger did);

    /**
     * 查询转发数
     *
     * @param did
     * @return
     */
    public Integer getForwardNums(@Param("did") BigInteger did);

    /**
     * 获取用户的头像url
     *
     * @param id
     * @return
     */
    public String getUserImage(@Param("id") String id);

    /**
     * 通过did获取用户id
     *
     * @param did
     * @return
     */
    public String getUserId(@Param("did") BigInteger did);

    /**
     * 模糊搜索十条以内的动态
     * @param keyword
     * @return
     */
    public List<BigInteger> searchDynamic(@Param("keyword") String keyword);
}
